Dejavu

오늘 소개해 드릴 프로젝트는 Dejavu입니다. Acoustic Fingerprinting용 오픈 소스인데요. 이 Acoustic Fingerprinting은 Shazam 이라던지 Spotify처럼 음악을 듣고는 어떤 음악인지 알아내는 알고리즘을 가지고 있습니다.

2016/05/19 Editor’s choice

worldveil/dejavu
_dejavu - Audio fingerprinting and recognition in Python_github.com


Acoustic fingerprinting 이란?

Acoustic fingerprint - Wikipedia, the free encyclopedia
_Practical uses of acoustic fingerprinting include identifying songs, melodies, tunes, or advertisements; sound effect…_en.wikipedia.org

네, 위키가 영어라서 죄송합니다.

원래 이 쪽 분야에서 유명한 프로젝트는 echoprint 라는 오픈 소스입니다. 안드로이드용으로 어떻게 만들 것인지에 대한 알고리즘까지 NDK 용으로 만들어져 있습니다.

The Echo Nest
_GitHub is where people build software. More than 14 million people use GitHub to discover, fork, and contribute to over…_github.com

이렇게 유명한 오픈소스가 있지만 dejavu를 소개하는 것은 mysql 데이타베이스에 입력하고 쿼리를 통해 가져오는 방식이라 독특함이 있어서 입니다.


설치를 해 봅시다

worldveil/dejavu
_dejavu - Audio fingerprinting and recognition in Python_github.com

설치 가이드가 있어서 죽 살펴보고는 리눅스가 더 쉽겠네 라고 덤볐다가 yum, apt-get 최신 레파지토리에서는 제대로 찾아지지 않아서 (제 실력 부족일 수 있습니다.)

Mac으로 다시 복귀했습니다.

Python은 2.7 기준으로 작업을 했습니다.

brew install portaudio  
brew install ffmpeg  

sudo easy\_install pyaudio  
sudo easy\_install pydub  
sudo easy\_install numpy  
sudo easy\_install scipy  
sudo easy\_install matplotlib  
sudo easy\_install pip  

sudo pip install MySQL-python  

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

짧은 몇줄 밖에 안되지만 마지막 두줄은 그냥 되지 않습니다.

mysql을 기본적으로 깔아야 하고 (이미 깔려 있을 테지만요)

마지막 줄은 Mac OS X -El Capitan에서는

OS X 10.11 엘 캐피탄에 도입된 새로운 보안체계 ‘루트리스(Rootless)’를 끄고 켜는 방법
_업데이트 (2015/12): OS X 엘 캐피탄이 업데이트 되면서 csrutil status 명령어와 관련해 변경사항이 있었습니다. 이번 WWDC가 개최되기 전부터 새로운 보안 기능이 애플의 두 운영체제에 도입될…_macnews.tistory.com

여기를 참조하세요.


실행을 해 봅시다.

python2. 7을 기준으로 실행을 합니다.

\>\>\> from dejavu import Dejavu  
\>\>\> config = {  
... "database": {  
... "host": "127.0.0.1",  
... "user": "root",  
... "passwd": <password above\>,   
... "db": <name of the database you created above\>,  
... }  
... }  
\>\>\> djv = Dejavu(config)

이 소스는 Mysql 에 접근을 하는 소스입니다.

설치를 하고

$python example.py

를 실행시켜 주면 dejavu 데이타베이스 및에 fingerprints 와 songs 테이블이 생깁니다.

+-----------------+

|Tables\_in\_dejavu |  
+-----------------+

|fingerprints |

|songs |  
+-----------------+

안에는 아래와 같이 데이타들이 들어 있습니다.

대강 Database 에 어떻게 저장하고 비교를 하는지 알것 같습니다.

더 자세한 설명은 아래의 링크를 참조하시면 될 것 같습니다.

Audio Fingerprinting with Python and Numpy
_The first day I tried out Shazam, I was blown away. Next to GPS and surviving the fall down a flight of stairs, being…_willdrevo.com


그러면 앱을 어떻게 만들면 좋을까요?

파일 Recognizer를 한번 실행해 보았습니다.

\>\>\> from dejavu.recognize import FileRecognizer  
\>\>\> song = djv.recognize(FileRecognizer, "./wav/18000.wav")  
\>\>\> print song  
{'song\_id': 6, 'song\_name': '18000', 'file\_sha1': 'AF3C75663CC86AD857E05E79EE8A028678D85359', 'confidence': 19, 'offset\_seconds': 0.0, 'match\_time': 1.4198949337005615, 'offset': 0}

아래와 같이 잘 인식 합니다.

wav파일들을 잘만 만들어서 스피커를 통해 아웃풋을 통해 들어오는 음악을 잘 만진다면 spotify 같은 앱도 만들 수 있겠군요. ( 오 이 근자감)


바로 되는 건 없어요?

있습니다. 눈썰미가 있으신 분은 Recognizer를 보고 예감하셨을 텐데요. MicrophoneRecognizer 라는 녀석이 있어서 실행을 시켜 보았습니다.

\>\>\> from dejavu.recognize import MicrophoneRecognizer  
\>\>\> song = djv.recognize(MicrophoneRecognizer, seconds=10)

이상하게 잘 작동하지 못하는 걸 보니 화이트 노이즈가 많아서 그런 듯 합니다.

이 노이즈들을 제거하는 내용은 다음번에 알아보겠습니다.

By Keen Dev on May 19, 2016.

Exported from Medium on May 31, 2017.